import { ElMessage } from 'element-plus'
import router from '@/router'

/**
 * 统一错误处理工具
 */

interface ApiError {
  response?: {
    status: number
    data?: {
      code?: number
      message?: string
    }
  }
  request?: any
  message?: string
}

/**
 * 处理API错误
 * @param error 错误对象
 * @param defaultMessage 默认错误提示
 */
export function handleApiError(error: ApiError, defaultMessage = '操作失败'): void {
  // 开发环境打印错误详情
  if (import.meta.env.DEV) {
    console.error('[API Error]:', error)
  }

  // 处理HTTP响应错误
  if (error.response) {
    const { status, data } = error.response
    
    switch (status) {
      case 400:
        ElMessage.error(data?.message || '请求参数错误')
        break
      
      case 401:
        ElMessage.error('登录已过期，请重新登录')
        // 清除token
        localStorage.removeItem('access_token')
        localStorage.removeItem('refresh_token')
        // 跳转到登录页
        router.push('/login')
        break
      
      case 403:
        ElMessage.error('没有权限执行此操作')
        break
      
      case 404:
        ElMessage.error(data?.message || '请求的资源不存在')
        break
      
      case 409:
        ElMessage.error(data?.message || '资源冲突')
        break
      
      case 422:
        ElMessage.error(data?.message || '数据验证失败')
        break
      
      case 429:
        ElMessage.error('请求过于频繁，请稍后再试')
        break
      
      case 500:
        ElMessage.error('服务器内部错误，请稍后重试')
        break
      
      case 502:
      case 503:
      case 504:
        ElMessage.error('服务暂时不可用，请稍后重试')
        break
      
      default:
        ElMessage.error(data?.message || defaultMessage)
    }
  } 
  // 处理网络错误
  else if (error.request) {
    ElMessage.error('网络连接失败，请检查网络设置')
  } 
  // 处理其他错误
  else {
    ElMessage.error(error.message || defaultMessage)
  }
}

/**
 * 处理WebSocket错误
 * @param error 错误对象
 * @param defaultMessage 默认错误提示
 */
export function handleWebSocketError(error: any, defaultMessage = 'WebSocket连接失败'): void {
  if (import.meta.env.DEV) {
    console.error('[WebSocket Error]:', error)
  }
  
  ElMessage.error(defaultMessage)
}

/**
 * 处理文件上传错误
 * @param error 错误对象
 */
export function handleUploadError(error: ApiError): void {
  if (error.response) {
    const { status, data } = error.response
    
    switch (status) {
      case 413:
        ElMessage.error('文件大小超出限制')
        break
      case 415:
        ElMessage.error('不支持的文件类型')
        break
      default:
        ElMessage.error(data?.message || '文件上传失败')
    }
  } else {
    ElMessage.error('文件上传失败，请重试')
  }
}

/**
 * 显示成功提示
 * @param message 提示信息
 */
export function showSuccess(message: string): void {
  ElMessage.success(message)
}

/**
 * 显示警告提示
 * @param message 提示信息
 */
export function showWarning(message: string): void {
  ElMessage.warning(message)
}

/**
 * 显示信息提示
 * @param message 提示信息
 */
export function showInfo(message: string): void {
  ElMessage.info(message)
}
